//题目描述
//​ 给出一个表达式, 其中运算符仅包含 + , -, *, / , ^ 要求求出表达式的最终值。
//
//​ 数据可能会出现括号情况，还有可能出现多余括号情况，忽略多余括号，正常计算即可；
//
//​ 数据保证不会出现大于 max long int的数据；
//
//​ 数据可能会出现负数情况，幂次不可能为负数，除法采用向 0取整。
//
//​ 注意：−9和 + 9分别代表负数和正数的 9 9
//输入 共一行，即为表达式。表达式长度不会超过1000.
//
//输出 共一行，既为表达式算出的结果。
//
//样例输入1  (2 + 2) ^ (1 + 1)
//样例输出1  16
//样例输入2  9 / -9
//样例输出2  - 1

#include <iostream>
#include <vector>
#include <string>
#include <stack>
#include <cmath>

using namespace std;

typedef long long LL;
#define INF 0x3f3f3f3f

// 权重

bool is_operator(char c)
{
	switch (c)
	{
	case '+':
	case '-':
	case '*':
	case '/':
	case '^': return true;
	default : return false;
	}
	return false;
}

LL calc(string& s, LL l, LL r)
{
	LL pos = -1, pri = INF - 1; //避免数字使用
	LL cur_pri; //符号权重
	LL temp_pri = 0; //附加权重

	for (LL i = l; i < r; i++)
	{
		cur_pri = INF; //数字权值最大
		switch (s[i])
		{
		case '(': temp_pri += 100; break;
		case ')': temp_pri -= 100; break;
		case '+':
		case '-': cur_pri = 1 + temp_pri; break;
		case '/':
		case '*': cur_pri = 2 + temp_pri; break;
		case '^': cur_pri = 3 + temp_pri; break;
		}

		if ((s[i] == '-' || s[i] == '+') &&
			(i - 1 < 0 || is_operator(s[i - 1]))) 
		{
			cur_pri += 1000;
		}

		if (pri >= cur_pri) //优先级相同的时候
		{
			pri = cur_pri;
			pos = i;
		}
	}

	if (pos == -1) //如果是纯数字的话
	{
		LL num = 0;
		for (LL i = l; i < r; i++)
		{
			if (s[i] < '0' || s[i]>'9') continue;
			num = num * 10 + (s[i] - '0');
		}
		return num;
	}
	else
	{
		LL a = calc(s, l, pos);
		LL b = calc(s, pos + 1, r);
		switch (s[pos])
		{
		case '+':return a + b;
		case '-':return a - b;
		case '*':return a * b;
		case '/':return a / b;
		case '^':return pow(a, b);
		}
	}

	return 0;
}

int main()
{
	string str;
	cin >> str;
	cout << calc(str, 0, str.size()) << endl;

	return 0;
}

